// UART设备寄存器定义
#define UART0 0x10000000

// UART寄存器
#define REG(reg) ((volatile unsigned char *)(UART0 + reg))
#define THR 0  // 发送保持寄存器
#define LSR 5  // 线路状态寄存器
#define LSR_TX_READY (1 << 5)  // 发送就绪位

// 初始化UART
void uart_init(void) {
}

// 输出单个字符到UART
void uart_putc(char c) {
    // 等待发送缓冲区为空
    while ((*REG(LSR) & LSR_TX_READY) == 0);
   // 硬件就绪后，将字符写入发送寄存器
    *REG(THR) = c;   // 写入字符，UART自动开始发送
}

// 输出字符串到UART
void uart_puts(const char *s) {
    // 遍历字符串，直到遇到空字符('\0')
    while (*s) {
        uart_putc(*s++);   // 输出当前字符并移动指针
    }
}
